#include "QueryEjecutor.h"

QueryEjecutor* QueryEjecutor::queryEjecutor = NULL;

QueryEjecutor::QueryEjecutor(){
	this->querys.insert( mapa_query (QUERY_TODAS_LAS_FALLAS     , new QueryTodasLasFallas()));
	this->querys.insert( mapa_query (QUERY_TODAS_LAS_FORMACIONES, new QueryTodasLasFormaciones()));
	this->querys.insert( mapa_query (QUERY_TODAS_LAS_LINEAS     , new QueryTodasLasLineas()));
	this->querys.insert( mapa_query (QUERY_TODOS_LOS_ACCIDENTES , new QueryTodosLosAccidentes()));
	this->querys.insert( mapa_query (QUERY_TRENES_ACCIDENTE     , new QueryTrenesAccidente()));
	this->querys.insert( mapa_query (QUERY_ACCIDENTES_FORMACION , new QueryAccidentesFormacion()));
	this->querys.insert( mapa_query (QUERY_TRENES_FALLA         , new QueryTrenesFalla()));
	this->querys.insert( mapa_query (QUERY_FALLAS_FORMACION     , new QueryFallasFormacion()));
}

QueryEjecutor::~QueryEjecutor(){}

QueryEjecutor* QueryEjecutor::getInstance(){
	if (!queryEjecutor){
		queryEjecutor = new QueryEjecutor();
	}

	return queryEjecutor;
}

void QueryEjecutor::execute(ArbolUB<DIMENSION_CLAVES, CANTIDAD_BITS_CLAVES>& arbol , ParametroQuery* parametroQuery, std::string archivoSalida, std::string tipoQuery){
	this->querys[tipoQuery]->execute(arbol, parametroQuery, archivoSalida);
}
